/*
 ============================================================================
 Name        : I2A_2_1_4_binary_add.c
 Author      : Yineng Chen
 Version     : 1.0
 Time        : 2011-10-04
 Description : Binary add
 ============================================================================
 */

#include <stdio.h>

int *binary_add(int a[],int b[],int c[],int n)
{
	int i=n;
	int carry=0;
	for(i=n-1;i>=0;--i)
	{
		c[i+1]=a[i]^b[i]^carry;
		carry=(a[i]&b[i])|(b[i]&carry)|(carry&a[i]);
	}
	c[0]=carry;
	return c;
}

int print_dec(int a[],int length)
{
	int i=0;
	int sum=0;
	for(i=0;i<length;++i)
	{
		sum=sum<<1;
		sum+=a[i];
	}
	return sum;
}

int main(void)
{
	printf("I2A_2_1_4_binary_add\n");
	int a[10]={1,1,1,1,1,1,1,1,1,1};
	int b[10]={1,1,1,1,1,1,1,1,1,1};
	int c[11];
	int i;

	binary_add(a,b,c,10);

	for(i=0;i<=10;++i)
	{
		printf("%d",c[i]);
	}
	printf("\n%d+%d=%d\n",print_dec(a,10),print_dec(b,10),print_dec(c,11));
	return 0;
}
